package com.zhb.cloud.core.util;

import java.util.List;
import com.zhb.cloud.model.Prize;

/**
 * @ClassName: PrizeUtils
 * @author: zhb
 * @date: 2017年8月1日 上午11:29:52
 * @Description: 奖品核心工具类
 *
 */
public class PrizeUtils {
	/**
	 * 根据Math.random()产生一个double型的随机数，判断每个奖品出现的概率
	 * 
	 * @param prizes
	 * @return random：奖品列表prizes中的序列（prizes中的第random个就是抽中的奖品）
	 */
	public static int getPrizeIndex(List<Prize> prizes) {
		int random = -1;
		try {
			// 计算总权重
			double sumWeight = 0;
			for (Prize p : prizes) {
				sumWeight += p.getPrizeWeight();
			}
			// 产生随机数
			double randomNumber = Math.random(); // 随机数
			// 根据随机数在所有奖品分布的区域并确定所抽奖品
			double d1 = 0;
			double d2 = 0;
			for (int i = 0; i < prizes.size(); i++) {
				d2 += Double.parseDouble(String.valueOf(prizes.get(i).getPrizeWeight())) / sumWeight; // 概率的最大值
				if (i == 0) {
					d1 = 0;
				} else {
					d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getPrizeWeight())) / sumWeight;
				}
				if (randomNumber >= d1 && randomNumber <= d2) { // 中奖根据随机数所在的范围区间,判断奖品
					// 当产生的随机数(double类型的值)介于两者之间表示中奖
					random = i;
					break;
				}
			}
		} catch (Exception e) {
			System.out.println("生成抽奖随机数出错，出错原因：" + e.getMessage());
		}
		return random;
	}

	// public static void main(String[] args) {
	// List<Prize> prizes = new ArrayList<>();
	// Prize prize = new Prize();
	// prize.setPrizeName("苹果");
	// prize.setPrizeWeight(1);
	// Prize prize1 = new Prize();
	// prize1.setPrizeName("橘子");
	// prize1.setPrizeWeight(1);
	// Prize prize2 = new Prize();
	// prize2.setPrizeName("香蕉");
	// prize2.setPrizeWeight(2);
	// Prize prize3 = new Prize();
	// prize3.setPrizeName("香蕉");
	// prize3.setPrizeWeight(2);
	// Prize prize4 = new Prize();
	// prize4.setPrizeName("香蕉");
	// prize4.setPrizeWeight(1);
	// Prize prize5 = new Prize();
	// prize5.setPrizeName("香蕉");
	// prize5.setPrizeWeight(1);
	// Prize prize6 = new Prize();
	// prize6.setPrizeName("香蕉");
	// prize6.setPrizeWeight(1);
	// Prize prize7 = new Prize();
	// prize2.setPrizeName("香蕉");
	// prize2.setPrizeWeight(1);
	// prizes.add(prize);
	// prizes.add(prize1);
	// prizes.add(prize2);
	// prizes.add(prize3);
	// prizes.add(prize4);
	// prizes.add(prize5);
	// prizes.add(prize6);
	// prizes.add(prize7);
	// int index = new PrizeUtils().getPrizeIndex(prizes);
	// System.out.println(index);
	// }
}
